如何在Qt QML TableView单元格中画圆? | 您所在的位置:网站首页 › qt 画圆圈 › 如何在Qt QML TableView单元格中画圆? |
我已经能够在averageAge字段中画出正确的圆。 我的ModelItem看起来像这样: struct ModelItem { Q_GADGET Q_PROPERTY( QString population MEMBER population ) Q_PROPERTY( int averageAge MEMBER averageAge ) Q_PROPERTY( bool selected MEMBER selected ) public: enum class Role { Selection = Qt::UserRole, ColumnType, ColorValue }; Q_ENUM(Role) QString population; int averageAge; bool selected { false }; bool operator!=( const ModelItem& other ) { return other.population != this->population || other.averageAge != this->averageAge; } };这里的关键点是ColumnType和ColorValue角色的定义。 我的自定义角色需要一个roleNames函数 QHash ModelList:: roleNames() const { return { { Qt::DisplayRole, "display" }, { int( ModelItem::Role::Selection ), "selected" }, { int( ModelItem::Role::ColumnType ), "type" }, { int( ModelItem::Role::ColorValue ), "colorValue" } }; }自定义角色需要由roleNames提供,并指定字符串"type“和"colorValue”。 我的数据函数如下所示: QVariant ModelList:: data( const QModelIndex& index, int role ) const { const ModelItem modelItem = mList.at( index.row() ); QVariant result = QVariant(); if ( role == Qt::DisplayRole ) { if ( index.column() == 0 ) { result = QVariant( QString( modelItem.population ) ); } else { result = QVariant( QString::number( modelItem.averageAge ) ); } } if ( role == int( ModelItem::Role::Selection ) ) { result = QVariant( QString( modelItem.selected ? "#eeeeee" : "white" ) ); } if ( role == int( ModelItem::Role::ColumnType ) ) { if ( index.column() == 0 ) result = QVariant( QString( "stringValue" ) ); else result = QVariant( QString( "colorValue" ) ); } if ( role == int( ModelItem::Role::ColorValue ) ) { QString color; if ( modelItem.averageAge < 13 ) color = "red"; else if ( modelItem.averageAge < 35 ) color = "yellow"; else color = "green"; result = QVariant( color ); } qDebug() |
CopyRight 2018-2019 实验室设备网 版权所有 |